<script type="text/javascript">
<!--
function confirmaDel(id, marcador){
	if(confirm("Deseja realmente deletar essa linha?")){
		window.location.href = "http://genetic/analise/deletar?id="+id+"&marcador="+marcador;
	}
	else{
		
	}
		
}

function editar(id, marcador){
	
	window.location.href = "http://genetic/analise/editar?id="+id+"&marcador="+marcador;
			
}

function inserirAnalise(marcador){
	
	window.location.href = "http://genetic/analise/?marcador="+marcador;
		
}
//-->
</script>


<?php

class Application_Model_Acesso extends Zend_Db_Table {
	
	// banco de dados padrao
	private $db;
	
	//metodo cnstrutor pega o adaptador padrao
	public function __construct() {
		$this->db = Zend_Db_Table::getDefaultAdapter ();
	}
	
	// cria uma tabela com o nome do marcador e para cada alelo cria uma coluna do tipo marcador_alelo
	public function criarTabelaDeAcessos($marcador, $alelos) {
		
		//pega o adaptador de banco de dados padrao
		

		//query que cria a tabela
		$sql = "CREATE TABLE IF NOT EXISTS `$marcador` (
                        `id` int(11) NOT NULL AUTO_INCREMENT,
                        `$marcador` varchar(20) NOT NULL,
                        `marcador_id` int(11) UNSIGNED NOT NULL ,    
                         PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
                         
                         ALTER TABLE  `$marcador` ADD INDEX (  `marcador_id` );
							ALTER TABLE  `$marcador` ADD FOREIGN KEY (  `marcador_id` ) REFERENCES  `genetic`.`ssr` (
							`id`
							) ON DELETE DROP TABLE `$marcador` ON UPDATE NO ACTION;
                         ";
		
		//execucao da query
		$this->db->query ( $sql );
		
		//criacao das colunas de acordo com a qtd de alelos
		try {
			foreach ( $alelos as $key => $aleloAtual ) {
				//echo "construindo tabela" . $marcador . "_" . $aleloAtual;
				//echo "<br>alelo $key: " . $aleloAtual;
				$coluna = $marcador . "_" . $aleloAtual;
				$this->db->query ( "ALTER  TABLE `$marcador` ADD `$coluna` INT( 1 ) NOT NULL " );
			}
		} catch ( Exception $e ) {
			$this->db->rollBack();
			echo $e;
		}
	}
	
	
	public function deletarTabelaDeAcessos($tabela){
		$this->db->query("DROP TABLE $tabela ");
	}
	
	//função que junta as tabelas com acessos semelhantes
	public function juntarTabelasComAcessosIguais($nomeAcessos){
		$querieInicio = "";
		$querieFim = "";	
		foreach ($nomeAcessos as $key => $acesso){
			
			if($key== 0){
				echo "key ".$key."<br>";
				$querieInicio .= "select * from $acesso";
				$querieFim .= " ON $acesso.$acesso";
				
			}
			else{
				echo "key ".$key."<br>";
				$querieInicio .= " INNER JOIN $acesso";	
				$querieFim .= " = $acesso.$acesso";					
		}
		}
		$querie =  $querieInicio.$querieFim;
		
		if($this->db->query($querie))
			echo "sim";
		else 	
			echo "não";
			
		return $querie;
			
		
	}
	public function compararAcessos($vetor1, $vetor2){
		$comum = null;
		if(isset($vetor1))
		foreach ($vetor1 as $v1){
			if(isset($vetor2))
			foreach ($vetor2 as $v2){
				if($v1 == $v2){
					$comum[] = $v1;
				} 
			}
		}
		return $comum;
	}
	public function acessosEmComun($marcadoresSelecionados){
		$comum = null;
		$vetorNomeAcessos = null;
		if(isset($marcadoresSelecionados))
		foreach ($marcadoresSelecionados as $chave1 => $marcadorAtual){
			$dados = $this->db->fetchAll("select * from $marcadorAtual");
			if(isset($dados))
			foreach ($dados as $chave2=> $dado){
				$vetorNomeAcessos[$chave1][$chave2] = $dado[$marcadorAtual];
			}
		}
		if(isset($vetorNomeAcessos[0]) && isset($vetorNomeAcessos[1]))
		$comum = $this->compararAcessos($vetorNomeAcessos[0], $vetorNomeAcessos[1]);
		if(count($vetorNomeAcessos) > 1){
		for ($i=2; $i< count($vetorNomeAcessos);$i++){
			$comum = $this->compararAcessos($comum, $vetorNomeAcessos[$i]);
		}
		}
		
		return $comum;
		
		
	}
	public function nomeTabelasAlelos($marcadoresSelecionados){
		$stringColunas = "";
		foreach($marcadoresSelecionados as $marcador){
			$dados = $this->db->fetchRow("select * from $marcador");
			foreach ($dados as $key => $dado){
				if($key != "id" && $key != "marcador_id" && $key != "$marcador")
				$stringColunas .= "<td>". $key."</td>";
			}
		}
		
		return $stringColunas;
		
	}
	public function nomeColunasPorMarcador($marcador){
		$stringColunas = "";		
			$dados = $this->db->fetchRow("select * from $marcador");
			foreach ($dados as $key => $dado){
				if($key != "id" && $key != "marcador_id" && $key != "$marcador")
				$stringColunas .= "<td>". $key."</td>";
			}		
		return $stringColunas;
	}
	
	public function nomeColunasQuery($marcador, $id=false){
		$stringColunas = "";		
			
			$dados = $this->db->describeTable($marcador);
			$i = 1;
			foreach ($dados as $key => $dado){
				if(count($dados) == $i)
				$virgula = "";
				else $virgula = ",";
				if($id){
					if($key != $marcador && $key != "marcador_id"){
						$stringColunas .= $key.$virgula;
					}
				}
				else{
					if($key != 'id' && $key != $marcador && $key != "marcador_id"){
						$stringColunas .= $key.$virgula;
					}
				}
				$i++;
				
			}
			
		return $stringColunas;
	}
	
	
	public function dadosAnalise($marcador, $cssLinhaPar){
		$stringDadosAnalise = "";
		$colunas = $this->nomeColunasQuery($marcador, true);
		
    	$dados = $this->db->fetchAll("select * from $marcador");
    	
    	$i=0;
    	foreach ($dados as $dado){
    		if($i%2 == 0)
    			$cssClass = $cssLinhaPar;
    		else 
    			$cssClass = "";
    		$stringDadosAnalise .= "<tr class='$cssClass'>";
    		foreach ($dado as $key=> $d){ 
    				if ($key == "id"){
    					$stringDadosAnalise .= "<td><a href=\" javascript:editar($d, '$marcador')\"><img src ='http://genetic/public/images/edit.png'></a></td><td><a href=\" javascript:confirmaDel($d, '$marcador')\"><img src ='http://genetic/public/images/fechar.png'></a></td>";
    				} 
    				else if($key != "marcador_id"){ 
    					
    				$stringDadosAnalise .= "<td>".$d."</td>"; 
    				}   			
    		}
    		$stringDadosAnalise .= "</tr>"; 
    		$i++;   		
    	}
    	
    	return $stringDadosAnalise;
    }
      
	
	public function listarAcessosComuns($acessosEmComun, $marcadoresSelecionados){
		$linhas = null;
		$contaAcessos =0;
		//echo"<tr class= 'linhaInicio'><td>Acesso</td>".$this->nomeTabelasAlelos($marcadoresSelecionados)."</tr>";
		foreach ($acessosEmComun as $acesso){
			$array = null;
			$array['acesso'] = $acesso;
			
			foreach($marcadoresSelecionados as $marcador){
				//echo "<br>coluna: $marcador= dado: $acesso";
				$dados = $this->db->fetchRow("select * from $marcador where $marcador='$acesso'");
				//$array[] = $acesso;
				foreach ($dados as $key => $dado){
					if($key != 'id' && $key != $marcador && $key != "marcador_id"){
									
					$array[] = $dado;
					}
				}
				
			}
			$linhas[] = $array;
			
			$contaAcessos++;
			//echo "<br>";
		}
		return $linhas;		
				
	}
	//para usar esta funcao deve-se pegar o nome do marcador antes de atualizar esta tabela
	public function renomearTabela($marcador, $marcador_id) {
		
		$ssr = new Application_Model_Ssr ( );
		//linha relativa ao marcdor_id
		$row = $ssr->fetchRow ( "id=$marcador_id" );
		$nomeTabela = $row->marcador;
		//echo $nome = $row->id;
		$sql = "
    			RENAME TABLE  `genetic`.`$nomeTabela` TO  `genetic`.`$marcador` ;
    	";
		//echo "renomeando a tabela";
		$this->db->query ( $sql );
		//echo "tabela renomeada";
	}
	//retotna o nome das colunas de uma tabela com excessao do id
	public function nomeColunas($tabela) {
		$metadata = $this->db->describeTable ( $tabela );
		
		//retrna os nomes das colunas da tebela
		$columnNames = array_keys ( $metadata );
		
		//remove o primeiro elemento do array		
		$nomeDasColunas = array_splice ( $columnNames, 2 );
		
		return $nomeDasColunas;
	}
	
	//muda o nome das counas de uma tabela os novos nomes serao no formato marcador_alelo
	public function atualizaTabelaDeAcessos($marcadorAntigo, $marcadorAtual, $alelos) {
		
		//nomes das colunas de acessos com valor binario  
		$nomeColuna = $this->nomeColunas ( $marcadorAntigo );
		//o tamanho do array nomeColuna representa numero de alelos do marcadorAntigo
		$tamAlelosAntigos = sizeof ( $nomeColuna );
		//numero de alelos novos
		$tamAlelosNovos = sizeof ( $alelos );
		//echo "alelos antigos: " . $tamAlelosAntigos;
		//echo "<br>alelos novos:" . $tamAlelosNovos;
		//echo $nomeColuna [0];
		$ssr = new Application_Model_Ssr ( );
		//linha relativa ao marcdor_id
		//$row = $ssr->fetchRow ( "id=$marcador_id" );
		//$marcadorAntigo = $row->marcador;
		//$qtdAlelosAntigo = $row->n_de_alelos;
		//$tabela = $row->marcador;
		//altera a coluna que representa de acessos
		$sqlAcesso = "ALTER TABLE  `$marcadorAntigo` CHANGE  `$marcadorAntigo`  `$marcadorAtual` BINARY( 1 ) NULL DEFAULT NULL";
		$this->db->query ( $sqlAcesso );
		
		if ($tamAlelosAntigos < $tamAlelosNovos) {
			try {
				for($i = 0; $i < $tamAlelosNovos; $i ++) {
					//nome da nova coluna
					$novoNomeColuna = $marcadorAtual . "_" . $alelos [$i];
					
					//variavel que armazena a consula sql
					$sql = "";
					if ($i >= $tamAlelosAntigos) {
						//echo "adicionando colunas..$i<br>";
						$sql = "ALTER TABLE  `$marcadorAntigo` ADD `$novoNomeColuna` BINARY( 1 ) NULL DEFAULT NULL";
						
					//substituir a linha
					//echo "chegou ao fim da tabela";
					} else {
						//muda o nome das colunas
						//echo "<br> atualizando colunas..$i";
						$sql = "ALTER TABLE  `$marcadorAntigo` CHANGE  `$nomeColuna[$i]`  `$novoNomeColuna` BINARY( 1 ) NULL DEFAULT NULL";
					}
					$this->db->query ( $sql );
				}
			} catch ( Exception $e ) {
				echo $e;
				$this->db->rollBack();
			}
		} else if ($tamAlelosAntigos > $tamAlelosNovos) {
			try {
				//echo "tamanho dos alelos antigos maior que os novos<br>";
				//echo "iniciando atualiza��o..<br>";
				for($i = 0; $i < $tamAlelosAntigos; $i ++) {
					//nome da nova coluna
					

					$sql = "";
					if ($i < $tamAlelosNovos) {
						$novoNomeColuna = $marcadorAtual . "_" . $alelos [$i];
						$sql = "ALTER TABLE  `$marcadorAntigo` CHANGE  `$nomeColuna[$i]`  `$novoNomeColuna` BINARY( 1 ) NULL DEFAULT NULL";
						
						//echo "$i substituindo coluna $nomeColuna[$i] por $novoNomeColuna<br>";
						if ($i == 10)
							echo "<br><br>";
					} else {
						//echo "adicionando colunas..$i<br>";
						echo "<br>$i: excluido tabela $nomeColuna[$i]..";
						$sql = "ALTER TABLE  `$marcadorAntigo` DROP `$nomeColuna[$i]`";
					}
					$this->db->query ( $sql );
				}
			} catch ( Exception $e ) {
				echo $e;
				$this->db->rollBack ();
			}
		
		} else {
			try {
				for($i = 0; $i < $tamAlelosAntigos; $i ++) {
					$novoNomeColuna = $marcadorAtual . "_" . $alelos [$i];
					$this->db->query ( "ALTER TABLE  `$marcadorAntigo` CHANGE  `$nomeColuna[$i]`  `$novoNomeColuna` BINARY( 1 ) NULL DEFAULT NULL" );
				}
			
			} catch ( Exception $e ) {
				echo $e;
				$this->db->rollBack ();
			}
		}
		//renomeia a tabela
		if ($marcadorAntigo != $marcadorAtual) {
			try {
				$this->db->query ( "RENAME TABLE  `$marcadorAntigo` TO  `$marcadorAtual` ;" );
			} catch ( Exception $e ) {
				echo $e;
				$this->db->rollBack ();
			}
		}
	
	}
	
	public function alteraColunas($tamanhoAlelosAntigos, $tamanhoAlelosNovos, $tabelaAntiga, $tabelaNova, $alelos) {
		
		//verifica se o tamanho atual dos alelos e menor do que o tamanho anterior 
		if ($tamanhoAlelosNovos < $tamanhoAlelosAntigos) {
			$this->db->query ();
			for($i = 1; $i <= $alelos; $i ++) {
				mysql_query ( "ALTER TABLE $tabela CHANGE $ssr$traco$i $ssr$traco$alelo[$i] BINARY" );
			}
			for($j = ($alelos + 1); $j <= $alelosAntigo; $j ++) {
				mysql_query ( "ALTER TABLE $tabela DROP $ssrAntigo$traco$aux[$j]" );
			}
			echo "menor";
		} 

		else if ($tamanhoAlelosNovos > $tamanhoAlelosAntigos) {
			echo "maior";
		} else
			echo "igual";
	}
	
	/*public function atualizarTabelaDeAcessos($marcador, $alelos, $marcador_id) {
		//tamanho dos alelos
		$tamanhoAlelosNovos = sizeof ( $alelos );
		$ssr = new Application_Model_Ssr ( );
		//linha relativa ao marcdor_id
		$row = $ssr->fetchRow ( "id=$marcador_id" );
		$tamanhoAlelosAntigos = $row->n_de_alelos;
		echo $nomeTabela = $row->marcador;
		//echo $nome = $row->id;
	

	//mudar o nome da tabela
	//verificar se o numero de alelos atual � menor que o numero antigo
	//se for deletar as colunas adicionais
	//se for maior acrescentar as colunas adicionais
	//se for igual n�o fazer nada
	//novo objeto ssr
	

	}*/

}